/* *常用地图坐标转换
*1，参数：points 传入经纬度坐标二维数组 [[lng,lat],...]
*2，参数：type 当前地图类型，'1'---百度地图、'2'---高德地图、'3'---腾讯地图
*3，高德、腾讯和谷歌地图坐标系相同，坐标无需转换
4，有些公司（比如高德，百度，腾讯）是先经度，再纬度，即Point(lng lat)。但谷歌坐标的顺序恰好相反，是(lat
lng)。
*5，返回{
  points:[[lng,lat],...],原坐标数据
  pointsA:[[lng,lat],...],转换后的高德坐标
  pointsB:[[lng,lat],...],转换后的百度坐标
  pointsT:[[lng,lat],...],转换后的腾讯坐标
}
2022-10-29 by xz
*/

const x_pi = (3.14159265358979324 * 3000.0) / 180.0;
// 将腾讯/高德地图经纬度转换为百度地图经纬度
function aTb(lng, lat) {
  let x = Number(lng);
  let y = Number(lat);
  let z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
  let theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
  let lngs = z * Math.cos(theta) + 0.0065;
  let lats = z * Math.sin(theta) + 0.006;
  return {
    lng: lngs,
    lat: lats,
  };
}
//将百度地图经纬度转换为腾讯 / 高德地图经纬度;
function bTa(lng, lat) {
  let x = Number(lng) - 0.0065;
  let y = Number(lat) - 0.006;
  let z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
  let theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
  let lngs = z * Math.cos(theta);
  let lats = z * Math.sin(theta);
  return {
    lng: lngs,
    lat: lats,
  };
}
const mapCoordinateConversion = (points, type) => {
  if (!points || !type || points.length < 1) {
    return "请传入正确参数！";
  }
  let data = {};
  let list = points;
  let pointsAT = []; //转换后的高德或腾讯坐标
  let pointsB = []; //转换后的百度坐标
  //百度
  if (type == "1") {
    pointsB = list;
    for (let i = 0; i < list.length; i++) {
      var o = bTa(list[i][0], list[i][1]);
      pointsAT.push([o.lng, o.lat]);
    }
  }
  //高德或腾讯
  if (type == "2" || type == "3") {
    pointsAT = list;
    for (let i = 0; i < list.length; i++) {
      var o = aTb(list[i][0], list[i][1]);
      pointsB.push([o.lng, o.lat]);
    }
  }
  data = { points: list, pointsAT, pointsB };
  return data;
};

export { mapCoordinateConversion };
